package com.mida.app.report.service;

import com.mida.dms.mdm.dto.ServiceInstance;
import com.mida.dms.mdm.vo.PullDownMenuVO;
import com.mida.dms.mdm.vo.provider.BusinessUnitVo;
import com.mida.dms.mdm.vo.provider.EmployeeInfoVo;
import com.mida.tool.common.result.ListResult;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 主数据Api
 * @author Peng.Wu
 * @version version-1.0
 * @date 2021/6/22 19:06
 */
public interface MasterDataSvc {

    /**
     * 查询开单科室
     * @author peng.Wu
     * @date 19:25 2021/6/22
     * @return Set<ManualRegistrationDto>
     */
    //Set<ManualRegistrationDto> selectBusinessUnit();

    /**
     * 查询就诊类型
     * @author peng.Wu
     * @date 19:27 2021/6/22
     * @return List<ManualRegistrationDto>
     */
    //List<ManualRegistrationDto> selectVisitScence();


    List<PullDownMenuVO> drawer(String businessUnitCode);

    /**
     * 开单医生
     * @param businessUnitSoid 业务单元SoId
     * @author peng.Wu
     * @date 19:30 2021/6/22
     * @return List<ManualRegistrationDto>
     */
    //List<ManualRegistrationDto> selectBillingDoctor(String businessUnitSoid);

    /**
     * 查询紧急程度
     * @author peng.Wu
     * @date 19:29 2021/6/22
     * @return List<ManualRegistrationDto>
     */
    //List<ManualRegistrationDto> emergencyLevel();

    /**
     * 依据编码体系标识获取主数据卡信息
     * @param codeIdentifier 编码标识
     * @return List<ManualRegistrationVo>
     */
    //List<CardCodingSystemDto> getCardInfoByCodeIdentifier(String codeIdentifier);

    /**
     * 根据机房soId查询设备信息和技术参数
     * @param equipmentRoomSoId 机房SoId
     * @author peng.Wu
     * @date 17:20 2021/6/16
     * @return DeviceInfoVo
     */
    //DeviceInfoDto selectDeviceInfoByEquipmentRoomSoId(BigDecimal equipmentRoomSoId);

    /**
     * 查询检查类型(检查服务类型)
     * @author peng.Wu
     * @date 19:31 2021/6/22
     * @return List<ManualRegistrationDto>
     */
    //List<ManualRegistrationDto> selectCheckType();

    /**
     * 条件获取检查项目
     * @param initials 名称检索,代码,拼音码,五笔码，soid
     * @param examType 检查类型
     * @param currentPage 当前页
     * @param pageSize 每页条数
     * @return Page<MsdServiceInstancePageVo>
     */
    //Page<MsdServiceInstancePageDto> selectMsdServiceInstance(String initials, Long examType, Integer currentPage, Integer pageSize);

    /**
     * 查询诊断
     * @author peng.Wu
     * @date 19:39 2021/6/22
     * @return List<DiagnosisDto>
     */
    //List<DiagnosisDto> queryDiagnosis();

    /**
     * 根据员工soid查询医院位置
     * @param employeeSoid 员工soid
     * @author peng.Wu
     * @date 19:38 2021/6/22
     * @return 位置信息
     */
    //String selectOrgLocationBySoid(String employeeSoid);

    /**
     * 查询检查科室
     * @param businessUnitSoId 根据业务单元SoId过滤
     * @param hospitalSoId 医院SoId
     * @param buTypeCode 业务单元类型代码 业务单元类型代码,如医技单元3572/临床单元2951/护理单元2954
     * @return List<ManualRegistrationVo>
     */
    //List<ManualRegistrationDto> selectExamUnit(BigDecimal businessUnitSoId,Long hospitalSoId,Long buTypeCode);

    /**
     * 通过SoId 获取字段名
     * @param soid SoId
     * @author peng.Wu
     * @date 10:05 2021/6/23
     * @return 字段名
     */
    String getDataSetName(BigDecimal soid);

    /**
     * 从主数据获取检查服务实例信息
     * @param msdServiceInstanceSoid 查服务实例SoId
     * @author peng.Wu
     * @date 14:31 2021/6/23
     * @return ListResult<List<ServiceInstance>>
     */
    ListResult<List<ServiceInstance>> findServiceInstanceInfoBySoid(BigDecimal msdServiceInstanceSoid);

    /**
     * 引用主数据生成的SoId
     * @author peng.Wu
     * @date 16:25 2021/6/23
     * @return Long 主数据生成的SoId
     */
    //Long createSoId();

    /**
     * 获取机房地址
     * @param equipmentRoomSoid 机房SoId
     * @author peng.Wu
     * @date 17:19 2021/6/23
     * @return 机房地址
     */
    String getEngineRoomAddress(BigDecimal equipmentRoomSoid);

    /**
     * 根据医生表述获取医院名称+院区
     * @author wangconghao
     * @Date 2021/6/10 11:37
     * @param requestDoctor 医生
     * @return java.lang.String
     */
    String getLocaltionNameByRequestDoctor(BigDecimal requestDoctor);


//    BigDecimal getRandomEquipmentRoomByExamType(BigDecimal examType);

    ListResult<String> getSerialNumberBySoid(Long codingRuleInfoSoid, Long orgInfoSoid, Long resourceInfoSoid,
                                             Long userInfoSoid);

    ListResult<EmployeeInfoVo> findOneBySoid(Long employeeSoid, boolean isIncludeDelete);

    ListResult<BusinessUnitVo> findBusinessUnitBySoid(Long businessUnitSoid, boolean isIncludeDelete);

    /**
     * 批量查询检查服务实例名称
     */
    Map<BigDecimal, String> findServiceInstanceInfosBySoids(List<BigDecimal> msdServiceInstanceSoids);
    /**
     * 批量查询业务单元名称
     */
    Map<BigDecimal, String> findBusinessUnitBySoids(List<BigDecimal> msdServiceInstanceSoids);
    /**
     * 批量查询soid对应中文名
     */
    Map<BigDecimal, String> findDataSetNamesBySoids(ArrayList<BigDecimal> dataSetSoids);
    /**
     * 批量查询医生姓名
     */
    Map<BigDecimal, String> findRequestDoctorNameBySoids(ArrayList<BigDecimal> requestDoctorSoids);
}
